package com.zmn.plat.business.interfaces.channel;

import java.util.Date;
import java.util.List;

import org.springframework.web.bind.annotation.RequestBody;

import com.zmn.mcc.cas.model.LoginStaff;
import com.zmn.plat.common.dto.channel.ChannelCityRatioDIO;
import com.zmn.plat.common.dto.channel.ChannelCityRatioDRO;
import com.zmn.plat.model.vo.channel.ChannelCityPriceRatioModifyVo;
import com.zmn.plat.model.vo.channel.ChannelCityRatioBatchVO;

/**
 * 描述:ChannelCityPriceRatioBService
 *
 * @author linfeng
 * @since: 2019/08/27 15:56
 */
public interface ChannelCityPriceRatioBService {

    /**
     * 添加或修改渠道城市分类系数
     *
     * @param mcStaffName
     * @param cityPriceRatioModify
     * @return
     */
    void addEditCategoryRatio(String mcStaffName, @RequestBody ChannelCityPriceRatioModifyVo cityPriceRatioModify);

    /**
     * 描述: 根据渠道ID、产品ID和城市ID查询城市系数 如果渠道、城市对应产品二级分类系数已配置，则返回对应二级分类系数，如果没有配置则向下执行 如果渠道、城市对应产品一级分类系数已配置，则返回对应一级分类系数，如果没有配置则向下执行
     * 如果渠道对应城市系数已配置，则返回对应城市系数，如果没有配置则向下执行 如果渠道对应渠道价格系数已配置，则返回对应如果渠道对应渠道价格系数，如果没有配置则向下执行 如果基础城市对应产品二级分类系数已配置，则返回对应二级分类系数，如果没有配置则向下执行
     * 如果基础城市对应产品一级级分类系数已配置，则返回对应一级分类系数，如果没有配置则向下执行 如果基础城市对应城市系数已配置，则返回对应城市系数，如果没有配置则返回null
     *
     * @param channelId
     *            渠道ID
     * @param productId
     *            产品ID
     * @param cityId
     *            城市ID
     * @param type
     *            类型（1,保外，2保内）
     * @param priceType
     *            价格类型（1,销售价，2内部结算价）
     * @return 城市系数
     * @auther tanghongjun
     * @since 2019/8/29 16:01
     */
    Float findRatioByChannelIdAndCityId(Integer channelId, Integer cityId, Integer productId, Integer type, Integer priceType);

    /**
     * 描述: 查询城市系数,同findRatioByChannelIdAndCityId，但是需要添加额外的请求参数
     *
     * @return ResponseDTO<ChannelCityRatioDRO>
     * @auther: tanbiao
     * @since: 2019/11/21 10:00
     */
    ChannelCityRatioDRO getRatioByChannelIdAndCityIdAndProductIdAndBizType(ChannelCityRatioDIO channelCityRatioDIO);

    /**
     * 描述: 批量保存城市系数
     *
     * @param mcStaff
     *            操作人
     * @param cityRatioBatchVO
     *            系数和城市参数
     * @return
     * @auther linfeng
     * @since 2020/3/17 16:04
     */
    void saveCityRatioBatch(LoginStaff mcStaff, ChannelCityRatioBatchVO cityRatioBatchVO);

    /**
     * 描述: 批量保存城市分类系数
     *
     * @param mcStaff
     *            操作人
     * @param cityRatioBatchVO
     *            系数和城市参数
     * @return
     * @auther linfeng
     * @since 2020/3/17 16:04
     */
    void saveCityCategRatioBatch(LoginStaff mcStaff, ChannelCityRatioBatchVO cityRatioBatchVO);

    /**
     * 复制某个渠道系数包含：渠道折扣系数、渠道城市系数、渠道分类系数
     *
     * @param sourceChannelId
     * @param targetChannelId
     * @param bizType
     * @param priceType
     * @param effectiveDate
     * @param ratioTypes
     * @param opertor
     */
    void copyRatio(Integer sourceChannelId, Integer targetChannelId, Integer bizType, Integer priceType, Date effectiveDate, List<Integer> ratioTypes, String opertor);
}
